//
//  AirOperation.h
//  AirCpp
//
//  Created by Penghao on 14-2-25.
//  Copyright (c) 2014年 PengHao. All rights reserved.
//

#ifndef __AirCpp__AirOperation__
#define __AirCpp__AirOperation__

#include <iostream>
#include "../AirObject/AirObject.h"

namespace AirCpp{
    /**
     *	多线程的操作，将对象和相应需要进行调用的方法封装到其中
     */
    template <class T>
    class AirOperation : public AirObject{
    private:
        T *obj;                    //object
        void *(T::*fun)(void *);     //function
        void *argments;             //argments
    public:
        /**
         *	初始化
         *
         *	@param 	 t	调用对象
         *
         *	@param 	 _fun	调用方法
         *
         *	@param 	 arg	调用参数
         */
        void init(T *t, void* (T::*_fun)(void *), void *arg){
            obj = t;
            fun = _fun;
            argments = arg;
        }
        
        /**
         *	运行
         *
         */
        void * invocate(){
            return (obj->*fun)(argments);
        }
    };
}

#endif /* defined(__AirCpp__AirOperation__) */